Skip to content

feat(binding): add native compiler and public platform packages - #796

Open
owjs3901 wants to merge 23 commits into
mainfrom
feat/napi-binding
Open

owjs3901 wants to merge 23 commits into
mainfrom
feat/napi-binding

Conversation

@owjs3901

@owjs3901 owjs3901 commented Oct 20, 2026 •

Copy link
Copy Markdown
Contributor

최종 검토 준비 — 2026-11-03

현재 parent head는 51c89930cf1db5a28da0e95bb850b30ff0be61d2, base main은 675f7e20bb93928971112525dc8d2df73e42debe입니다. 이 parent 위의 native 기본 플러그인 전환 PR #884는 G 통합 검증을 마쳐 head 3b30b7d6에서 Ready for review 상태입니다. #884의 자동 CI 41552308801 attempt 1은 25 SUCCESS / main 전용 2 조건부 SKIP이며 wasm-size와 별도 Codecov patch도 성공했습니다.

이 PR #796의 결과는 #884와 구분합니다. 자동 exact-head CI 41532324945, attempt 1은 24 SUCCESS / 2 조건부 SKIP / wasm-size 1 FAILURE, workflow 전체 결론은 FAILURE입니다. 8개 native build·pack collector·8개 consumer를 포함한 17개 native job과 모든 기능 job, Linux Rust 100%, root/Vite 100% 및 Codecov patch는 성공했습니다. 실패한 size 지표는 아래에 공개한 기존 승인 예외로 유지하며, 이를 전체 CI 성공으로 바꾸어 표시하지 않습니다. 기능 검증 예외를 추가하거나 source·budget·버전·캐시를 변경하거나 CI를 다시 실행하지 않았습니다.

검토 준비는 병합이나 배포를 수행한 상태가 아닙니다. 병합은 사용자가 #796 → #884 순서로 진행합니다. 성능 결론 OPEN, NumberToNumber 및 기존 비교·오류 계약의 한계와 main 후속 항목은 아래 기록대로 유지합니다.

아래는 이번 검토 준비 이전의 원문 이력입니다. 과거의 Draft 유지·이전 head·당시 남은 작업 문구는 해당 시점의 기록으로 보존하며 위 최신 상태를 대신하지 않습니다.


검토 준비 이전의 원문 이력

최신 main 통합 — 51c89930

현재 parent head는 51c89930cf1db5a28da0e95bb850b30ff0be61d2, tree는 43952cee2a02d27e139eb638984597f777dc3d59입니다. 기존 parent 86931b4c에 당시 live main 675f7e20를 정상 두 부모 merge로 통합하고 정상 push를 완료했습니다. native 기본 플러그인 전환은 상위 stacked PR #884에서 진행하며 이 PR은 draft로 유지합니다.

  • main의 65개 경로를 가져왔고, 기존 parent의 변경 100개 경로 중 겹친 곳은 libs/extractor/src/imported_constants.rs 한 곳입니다. 이 파일은 parent의 기존 변경을 모두 유지하면서 main의 &builder → (&builder).into() 한 줄을 적용한 정확한 결과입니다. 나머지 main 64개와 parent 99개 경로는 각 원본 blob을 유지합니다. 55개 manifest·lockfile의 내용도 그대로이며 dependency pin이나 제품 API·오류 계약 변경을 추가하지 않았습니다.
  • frozen install 뒤 Windows native binding을 명시적으로 새로 빌드하고, 정상 root build로 WASM과 전체 JS package를 빌드했습니다. 새 native image와 WASM은 실제 통합 Rust source에서 만들어졌으며 이전 feat(plugins): add native-default engine selection infrastructure #884 binary와 다른 SHA를 확인했습니다. 부모 source에 없는 상위 branch 전용 선언·map 6개는 개별 파일로 private journal에 보존했고, 남은 생성 파일 471개를 검증한 뒤 모든 선언된 dist entry point의 load/export 검증을 다시 통과했습니다.
  • 기존 .husky/pre-commit의 bun lint → bun run test를 그대로 실행한 정상 merge commit hook이 1265.070초에 통과했습니다. cargo fmt --check, 전체 target/feature의 clippy -D warnings, ESLint와 아래 로컬 검증을 통과했으며 skip·실패는 없습니다. 종료 시 owned process는 0이고 memory limit·watchdog 실패는 없습니다. hook 후 source·manifest·lockfile과 생성 파일, ordinary native image·WASM, 모든 3031개 index entry가 검토한 tree와 그대로임을 확인했습니다.
이번 parent merge의 로컬 검증 실제 결과
Windows root Bun 6779 pass / 0 fail, 89 snapshots, 23886 expectations, 181 files
Windows Vite Bun 872 pass / 0 fail, 2610 expectations, 44 files
root LCOV lines 10627/10627, functions 1026/1026 — 모두 100%
Vite LCOV lines 1425/1425, functions 162/162 — 모두 100%
Windows Rust native coverage 97.80%, 33139/33886 lines; extractor test group 10406/0
exact-head hosted CI 검증 실제 완료 결과
41532324945 attempt 1 head 51c89930, 실제 27 jobs 중 24 SUCCESS, 2 조건부 SKIPPED, wasm-size만 FAILURE; workflow 전체 결론은 FAILURE
native delivery 8-target build + pack collector + 8 consumer, 총 17 jobs 모두 SUCCESS
Linux Rust native coverage 100.00%, 23274/23274 lines
Linux root Bun 6779 pass / 0 fail, 89 snapshots, 23883 expectations, 181 files; functions·lines 모두 100%
Linux Vite Bun 871 pass / 1 기존 Windows 전용 skip / 0 fail, 총 872 tests, 2610 expectations, 44 files; functions·lines 모두 100%
built Bun regression 10 pass / 0 fail, 24 expectations, 4 files
publish E2E 기본 196 passed, landing-dev 13 passed, singleCss 196 passed
나머지 기능 jobs landing-next-e2e, react-18, webpack-extends-theme, release-compat, benchmark, vinext-rsc-css-e2e 모두 SUCCESS

위 hosted 수치는 해당 run의 실제 완료 job 목록과 publish 원본 log에서 확인했습니다. Vite의 기존 Linux skip 이름은 removes a Windows held-directory fixture only after its owned tree exits이며, 조건부 job skip은 deploy-pages와 release입니다. 이 parent의 정상 root test script는 native coverage와 root/Vite Bun suite를 실행합니다. 상위 #884의 engine Node suite 결과를 이번 parent의 실행 결과로 옮기지 않았습니다. 재실행·cache 제거·새로운 기능 면제는 추가하지 않았으며 실제 npm 게시나 PR merge·approve·close도 수행하지 않았습니다. 기존 성능 OPEN 항목과 예외 기록은 아래 원문 그대로 남아 있습니다.

실제 완료된 일반 CI 7개 job의 원본 log를 모두 보존했습니다. 이 parent에는 build-host.mjs helper가 없고 정상 root build는 WASM·전체 JS build입니다. 해당 7개 log에 devup.host-native-build event가 없으므로 host native build 소요 시간을 산출하지 않았습니다. 이를 비용 0으로 해석하거나 job 전체 소요 시간을 native build 시간으로 대체하지 않습니다. target별 native delivery 17개 job 및 native coverage용 instrumented build는 별도 범위입니다. 상위 #884 최종 통합은 자체 실행에서 실제 host native build event와 시간을 확인해야 합니다.

이번 wasm-size는 source build나 provenance 실패 없이 비교 단계에서 실패했습니다. 실제 비교 source는 base main 675f7e20와 PR 합성 merge de9e3200이며, GitHub commit API에서 합성 merge의 tree 43952cee가 pushed parent 51c89930의 tree와 정확히 같음을 확인했습니다. 네 지표의 원본 결과는 다음과 같습니다.

WASM size 지표 Base bytes Candidate bytes Limit bytes 결과
wasm/raw 6671531 6681036 6738944 PASS
wasm/gzip 2407705 2410880 2432000 PASS
glue/raw 43765 49816 45056 FAIL
glue/gzip 7343 9049 8192 FAIL

glue의 두 candidate 절대값과 한도는 아래 기존 기록의 크기 초과와 같습니다. 기존 사용자가 승인한 WASM size 전용 예외를 이번 비교 실패에 적용합니다. wasm-size의 실제 FAIL과 전체 workflow의 FAILURE를 그대로 보존합니다. 그 밖의 모든 기능 job·native 17개·Linux Rust 100%는 이 run에서 별도로 통과했으며 다른 실패에 예외를 적용하지 않았습니다. 크기 budget·workflow·source는 변경하지 않았습니다.

이전 설명과 검증 기록 — 원문 보존

아래 본문은 기존 head에서 기록한 당시 결과·제약·성능 수치입니다. 최신 head와 이번 통합의 검증 상태는 위 추가 기록에 표시합니다.

Refs #686 (napi binding). 이 Draft는 main 기반의 네이티브 바인딩과 공개 패키지 PR입니다. #794는 병합되었고 현재 head는 96ede13d3c2b963512b54f59d7750567989b3dc2, tree는 a4c198fd40b95192a6e01f01b71c051be9d330df입니다. #883·#891·#810을 포함한 main 81d6d924를 두 부모 merge commit bb90ac94로 통합했습니다. 플러그인의 native 기본값 전환은 이 PR 위의 별도 stacked Draft로 진행합니다.

요약

  • 공통 libs/binding, thin WASM 위임과 napi-rs 네이티브 백엔드, 공개 CJS/ESM 로더·선언 파일 및 9개 npm 패키지를 전달합니다. 29개 공개 이름의 함수/클래스 identity를 CJS/ESM에서 공유하며 default init은 없습니다. native/WASM 바인딩이 생성한 오류는 runtime 생성 위치 메타데이터를 제외한 동일한 자체 속성(own properties)을 가지며 code 속성은 없습니다. Bun의 두 선택적 필드는 아래 메타데이터 절에 명시합니다.
  • 공개 패키지는 @devup-ui/binding 및 @devup-ui/binding-{linux-x64-gnu,linux-arm64-gnu,linux-x64-musl,linux-arm64-musl,darwin-x64,darwin-arm64,win32-x64-msvc,win32-arm64-msvc}입니다. 플랫폼 8개는 루트 binding의 optional dependency이며 raw addon/adapter/positional protocol은 공개 ABI가 아닙니다.
  • 자동 WASM fallback, WASI, 다운로드, 설치 시 컴파일, dependency pin과 클라이언트 스타일링 런타임은 없습니다. 최종 공통 옵션 계약은 engine?: 'wasm' | 'native', 기본 native이며 WASM은 선택 모드로 유지하지만 플러그인 변경은 별도 PR입니다.

동작

  • JS 값을 JSON으로 사전 변환하지 않고 기존 Rust Deserialize로 읽습니다. wasm32 인덱스 범위, Map/Set/struct 구분, getter/iterator/resolver 호출 순서·예외·receiver·arity와 reset 소유권을 유지합니다. 18개 함수의 45개 인자 위치에서 동일한 진짜 TypeError를 검증합니다.
  • preflight aliases의 schema 실패 및 caught iterator 실패 변환만 기존 기본 처리를 유지합니다. raw access/변환 실패는 원래 identity로 core/resolver 전에 중단하고 재진입 전에 pending failure를 소비합니다. 추출·예약은 strict합니다.
  • seedFileMap은 검증·복사한 prefix보다 커진 마지막 length를 TypeError로 거절하며 정상 shrinking과 읽기 순서를 유지합니다. WASM FileMap은 untrusted length hint로 speculative reserve하지 않습니다.
  • private index/schema slot의 불필요한 전역 Number 관찰, primitive BigInt의 전역 String 관찰, byte 진단의 Array.from 관찰 및 Symbol.iterator 접근 오류 변환을 수정했습니다. demanded local/namespace exported name은 사전순이며 nested Changed는 가장 작은 객체 키를 선택합니다. export-star 소스 순서와 첫 일치 short circuit은 유지합니다.
  • main 통합은 ResolverState를 공통 core로 옮겨 같은 출판 전 located resolver 실패를 사용하고, shorthand 등록 실패를 typed error로 전파합니다. native/WASM의 전체 메시지·위치·cause 및 publication refusal을 비교하는 42개 새 시나리오/Node·Bun 12회 raw record parity가 통과했고 기존 7개 resolver 테스트 및 원래 assertions의 의도를 유지했습니다. 두 private state 길이 검증의 public 대체는 main/통합 양쪽 ghost mutation RED와 정상 GREEN으로 확인했습니다.

패키지와 릴리스

  • 독립 read-only CI가 최신 stable Rust/Node 및 최신 Bun으로 8개 최적화 이미지를 새로 빌드하고, 하나의 full-nine collector가 만든 동일 tarball을 8개 Node/Bun 소비자가 설치합니다. Linux ARM은 QEMU, macOS x64는 Rosetta, Windows ARM은 실제 ARM runner입니다. CJS/ESM·선언·격리 설치와 원시 결과 parity를 검사합니다.
  • musl은 dynamic linking이며 ELF DT_NEEDED가 정확한 musl libc 또는 GLIBC version requirement 없는 generic libc.so 후보여야 합니다. 이것만으로 호환성을 주장하지 않고 source/hash provenance 및 실제 x64/arm64 Alpine Node와 Bun 소비자 성공을 함께 요구합니다. GNU는 glibc 2.28 floor이며 musl/GNU 또는 CPU가 다른 이미지는 거절합니다.
  • Windows GNU tar가 드라이브 절대 경로를 remote host로 읽던 오류는 모든 4개 archive operation에 basename과 archive-parent cwd를 사용해 수정했습니다. integrity/member/image 검증은 그대로이며 최종 Windows 소비자 둘 다 성공했습니다.
  • 저장소의 clean/raw-source 검증 앞에는 bun install --frozen-lockfile을 실행하며 workspace-version-only drift는 bun.lock을 쓰지 않고 허용하고, 별도 lock-consistency gate·bot repair·수동 Update Versions 단계는 두지 않습니다.
  • 현재 manifest seed는 0.1.0이며 자동 첫 대상은 changepacks가 결정하는 0.1.1입니다. 소유자가 9개 이름에 0.0.0 placeholder를 먼저 게시하고 Trusted Publishers를 설정합니다. unrelated 기존 버전은 목표 게시를 막지도, 정확한 target version/integrity 선행조건을 만족하지도 않습니다. 작업자는 실제 게시·이름 등록·0.1.1 소비를 하지 않습니다.
  • 각 native manifest의 publish override는 선택된 절대 tarball만 scripts-disabled로 게시하고, root binding은 8개 정확한 registry version과 integrity를 먼저 요구합니다. main push/workflow/OIDC/source provenance가 필수입니다. release-only retry는 원래 run/1의 immutable full-nine bundle을 재사용하며 producer/collector를 재실행하지 않습니다. bundle 만료·누락·다른 source는 새 workflow run이 필요합니다.

새로 생기는 오류

  • 잘못된 binding 인자는 함수·인자·기대 타입을 표시하는 동일한 진짜 TypeError입니다. 예: setPrefix(false) → setPrefix(): argument prefix must be a string, null or undefined.
  • optional 플랫폼 패키지 누락/지원하지 않는 host는 native 로드 오류이며 silent fallback은 없습니다. 실제 image/transitive-library 오류는 원래 오류로 전파합니다. 기존 located source error 계약과 shorthand 등록 오류는 native에서도 숨기지 않고 출판 전에 실패합니다.
  • native coverage test feature를 준비 없이 수동으로 켜면 native coverage preparation is missing; run bun run test from the repository root로 실패하며 일반 Cargo test/제품 API에는 준비 조건을 추가하지 않습니다.
  • 새 source 문법 제한이나 스타일링 런타임은 없습니다. 원래 nested Changed 오류의 선택만 사전순으로 결정론화했습니다.

검증

최종 41294862352, head 96ede13d: 전체 conclusion은 FAILURE이며 native17개·landing-next-e2e·benchmark·release-compat·react-18·vinext-rsc-css-e2e·webpack-extends-theme는 SUCCESS입니다. publish는 Linux Rust/root/Vite 및 실제 production196/196을 통과한 뒤 dev navigation의 외부 GitHub API403으로 실패했고, wasm-size는 사용자 크기 면제에 해당합니다. 이 외의 실패를 허용하거나 제품 검증을 생략한 결과가 아닙니다. release/deploy-pages는 PR에서 정상적으로 실행하지 않습니다.

Native row 결과
native-build (win32-x64-msvc, x86_64-pc-windows-msvc, windows-latest) SUCCESS
native-build (darwin-x64, x86_64-apple-darwin, macos-latest) SUCCESS
native-build (linux-arm64-musl, aarch64-unknown-linux-musl, ubuntu-latest) SUCCESS
native-build (linux-x64-musl, x86_64-unknown-linux-musl, ubuntu-latest) SUCCESS
native-build (linux-arm64-gnu, aarch64-unknown-linux-gnu, ubuntu-latest) SUCCESS
native-build (win32-arm64-msvc, aarch64-pc-windows-msvc, windows-11-vs2026-arm) SUCCESS
native-build (darwin-arm64, aarch64-apple-darwin, macos-latest) SUCCESS
native-build (linux-x64-gnu, x86_64-unknown-linux-gnu, ubuntu-latest) SUCCESS
native-packs SUCCESS
native-consumer (linux-arm64-gnu, ubuntu-latest, arm64, arm64, node:current, bun-linux-aarch64.zi... SUCCESS
native-consumer (darwin-arm64, macos-latest, arm64, bun-darwin-aarch64.zip, native) SUCCESS
native-consumer (linux-x64-musl, ubuntu-latest, x64, amd64, node:current-alpine, bun-linux-x64-mu... SUCCESS
native-consumer (darwin-x64, macos-latest, x64, bun-darwin-x64.zip, Rosetta) SUCCESS
native-consumer (win32-x64-msvc, windows-latest, x64, bun-windows-x64.zip, native) SUCCESS
native-consumer (linux-x64-gnu, ubuntu-latest, x64, amd64, node:current, bun-linux-x64.zip, nativ... SUCCESS
native-consumer (win32-arm64-msvc, windows-11-vs2026-arm, arm64, bun-windows-aarch64.zip, native) SUCCESS
native-consumer (linux-arm64-musl, ubuntu-latest, arm64, arm64, node:current-alpine, bun-linux-aa... SUCCESS

Linux Rust는 22726/22726(100%)이며, Bun root와 Linux Vite의 두 All files 행은 함수·라인 모두100.00%입니다. 실제 pass/fail 행: 6767 pass, 0 fail, 871 pass, 0 fail. 이전 Node alpha 오류로 도달하지 못했던 Linux Vite coverage lane까지 통과했습니다.

Node 최신 stable 선택과 wasm-pack 최신 stable 검증은 main의 설정을 유지합니다. 통합 직후 Playwright가 Node 전용 native package 테스트를 수집하던 오류를 확인하고 해당 세 모듈만 브라우저 수집에서 제외했습니다. 기존 브라우저 196개/19파일과 main의 20개 spec 원본은 그대로이며, native-packs의 세 Node 테스트 모듈 검증도 그대로 실행합니다. 변경 전 수집은 실제 artifact-preparation 오류로 실패하고 변경 후 수집은196개로 성공했습니다.

두 hosted job은 실제 production196/196을 통과했습니다. landing-next의 한 번의 재실행은 dev13/13 및 singleCss production196/196까지 성공했습니다. publish의 job 재실행 요청도 성공 응답을 받았지만 최종 API 행과 로그는 원래 실행의 복사본이므로 새로운 publish 재실행 성공이라고 주장하지 않습니다. 남은 dev API403은 StarButton과 TeamCard의 인증 없는 요청이며 #893에 있는 fixture·server token 변경을 포함한 main 통합 후 다시 검증합니다.

로컬 최종 hook은1168.198초/exit0/owned survivor0이며 root6767+Vite872/0 fail,89 snapshots 및 두 All files function/line100%였습니다. fresh WASM/root build와 실제 landing dev navigation은 vinext13/13, Next13/13을 통과했습니다. Windows Rust32554/33142(98.23%)는 로컬 mapping이며 위 Linux100%의 대체가 아닙니다. LSP 미설치로 clean LSP라고 주장하지 않습니다.

wasm-size는 glue/raw49816 bytes(한도45056), glue/gzip9049 bytes(한도8192)의 크기 초과이며 budget 수정/shrink는 없습니다. WASM raw6656855/gzip2400709 bytes는 해당 상대 한도 안입니다.

변경 범위는100경로, gross 상계12330/14000, 자체 churn6902/6950입니다. main과 동일한 workflow 통합 줄94개는 별도 한도300개 안이며 제품 구현 변경으로 계산하지 않았습니다.

성능 예외

기존 유효 timing-only 40649575150의 A fe04a70/B ba0ce49 절대값을 변경 없이 아래 보존합니다. native/WASM corpus는0.37–0.44로 큰 순이익이지만 empty-call 고정 비용과 deterministic-order WASM B/A의 일부 cell은 strict gate를 실패했습니다. 2026-10-28 프로젝트 결정으로 이 단위는 명시적 예외와 함께 종료했으며 native transport 재설계·임계값 변경·모든 cell 합격을 주장하지 않습니다.

Empty-source 고정 비용: 알려진 OPEN 항목

12개 전체 비교 중 10개가 NativeB/WASMB<=1을 실패합니다. 아래 값은 microseconds/call이며 delta는 native-WASM 전체 호출 차이입니다. Node 최대 약3.589us, Bun 최대 약0.697us로, request/access/Output 각 연산의 분리 측정은 아닙니다.

Replica Host Method Native B WASM B Delta Native/WASM
1 node codeExtract/empty/0 10.833156250001252 8.06781249997357 2.7653437500276823 1.3427625208241691
1 node codeExtractWithoutSourceMap/empty/0 10.714812499941218 8.261593750120255 2.4532187498209623 1.2969425541875927
1 bun codeExtract/empty/0 8.504843750003488 8.769906250023496 -0.265062500020008 0.9697759026763487
1 bun codeExtractWithoutSourceMap/empty/0 8.666531250000276 8.436156249842952 0.23037500015732348 1.0273080527831158
2 node codeExtract/empty/0 8.510687500006497 7.142406249897704 1.3682812501087938 1.19157146796689
2 node codeExtractWithoutSourceMap/empty/0 8.974250000022721 7.443218749983771 1.53103125003895 1.2056947809094403
2 bun codeExtract/empty/0 7.013562500063131 6.316875000010214 0.6966875000529171 1.110289898098631
2 bun codeExtractWithoutSourceMap/empty/0 6.857312499960244 6.8710937500782165 -0.013781250117972377 0.9979943149345305
3 node codeExtract/empty/0 11.941468750165996 8.352499999972451 3.588968750193544 1.4296879676989382
3 node codeExtractWithoutSourceMap/empty/0 11.499187500078278 8.80674999999087 2.692437500087408 1.3057243023919378
3 bun codeExtract/empty/0 8.7754687500734 8.229468750002411 0.5460000000709897 1.0663469315769416
3 bun codeExtractWithoutSourceMap/empty/0 8.808718750032085 8.117375000068705 0.6913437499633801 1.085168388790407

Corpus 절대값과 WASM B/A: 알려진 OPEN 항목

Replica Host Native B us/call WASM A us/call WASM B us/call WASM B/A Native B/WASM B
1 node 229.2771081081125 617.5743783783756 622.0127297297424 1.0071867478748406 0.36860517019921896
1 bun 233.88566216216702 566.6472432432486 566.3179459459468 0.999418867203135 0.41299355571629837
2 node 230.0509459459392 600.9810675675668 589.846121621621 0.9814720520381552 0.3900185785972058
2 bun 236.36663513513122 532.4825675675697 541.9153513513462 1.0177147278771328 0.436168922961337
3 node 236.93371621621782 620.7626486486636 643.0004864864821 1.035823414772503 0.3684813949533441
3 bun 235.99329729729806 561.4674729729682 568.4556891891854 1.0124463420458083 0.41514809647504136

Node WASM B/A median=1.0071867478748406은 <=1.01을 통과하지만 replica3=1.035823414772503은 <=1.03을 실패합니다. Bun의 각 replica는 <=1.03을 통과하지만 median=1.0124463420458083은 <=1.01을 실패합니다. 프로젝트에서는 필수 결정론적 순서 수정과 이 replica 분포를 감안해 이 PR의 순성능 이익을 수용했습니다. 이것은 strict rule 합격 또는 미확인 원인의 해결 주장이 아니라 명시적 예외입니다.

남는 한계

  • 전역 Number를 교체할 때 사용자 데이터의 WASM 전역 호출과 native 내장 ToNumber는 다를 수 있습니다. 예: importFileMap({probe:8})의 native는 전역 호출0회/8이며 WASM은 교체 함수를1회 호출하여99 또는 원래 오류를 받습니다. 이 알려진 차이를 fixture 정규화나 parity 예외로 쓰지 않습니다.
  • 두 엔진의 동시 독립 build 격리는 지원하지 않습니다. 정상 입력의 출력·오류는 바이트 단위로 같아야 합니다.
  • 위 고정 비용과 WASM B/A는 명시적 OPEN 항목이며 후속 제안만 별도로 진행합니다. OIDC 실제 게시와 소유자의 placeholder/Trusted Publishers 준비는 작업자가 수행하지 않습니다.
  • #883을 포함한 main 통합은 완료했으며, #893의 외부 API quota 보완을 포함한 main 통합과 최종 shared-job green 및 별도 plugin engine switch는 남아 있습니다. Draft 해제/merge/close/approve·댓글은 하지 않습니다.

Bun 생성 위치 메타데이터

Bun에서는 내부 call-site bookkeeping에 따라 originalLine과 originalColumn이 한 engine 오류에는 있고 다른 쪽에는 없을 수 있습니다. 이 두 필드의 존재만 Bun의 runtime 생성 메타데이터로 취급하고 원래 값/descriptor는 증거에 그대로 보관합니다. 존재하는 필드의 숫자 형식과 descriptor, 그 밖의 own key와 남은 순서, 비생성 위치 값, 메시지/located text/constructor/prototype/cause는 정확히 검증합니다. stack frame과 runtime이 캡처한 생성 위치 값은 각 backend의 호출 경로를 원문으로 보관하며 동일한 frame/값을 요구하지 않습니다.

확인한 문법 오류 경로는 native와 WASM 모두 동기로 오류를 전달하며, engine에서 받은 객체가 Webpack loader callback까지 같은 identity로 유지됩니다. 이 차이를 위해 binding 오류를 복제하거나 비동기화한 변경은 없으며, 다른 사용자 속성의 parity 면제도 아닙니다.

owjs3901 and others added 6 commits October 20, 2026 23:28
Refs #686

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #686

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #686

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #686

Approved intermediate baseline A. Strict identity remains RED only at records 390 and 392: false/true setPrefix throws a WASM memory-access RuntimeError but a native Error. The shared all-position TypeError validation fix follows in its own commit B; this baseline does not waive identity, actual Linux native coverage, JS coverage, packaging, release, matrix, WASM size or performance gates.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #686

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #686

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
@owjs3901
owjs3901 changed the base branch from fix/portable-binding-state to main October 27, 2026 05:04
owjs3901 and others added 3 commits October 27, 2026 21:51
Refs #686. Native performance: all 17 historical native-slower losses remain OPEN; the prescribed isolated Linux hosting measurement comes next.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Native100 coverage increment: +8 paths / +930 gross over 61 / 6432; total 69 paths / 7362 gross, excluding only the two generated Cargo.lock files.

Run the actual instrumented production addon in real Node through a test-only required feature and the existing tarpaulin --objects report. Plain Cargo tests need no preparation; the CI 100 percent gate is unchanged. Standard reports remain XML and stdout.

Sort namespace barrel exported-name references lexically, preserving first-match short circuit and star source order. Select the lowest object key containing a nested Change. WASM now visits ./left rather than ./right in the regression graph and reports alpha at line 3 instead of beta at line 4. Keep all original 171 raw cases unchanged and append two cross-engine regressions.

All 17 native-slower cells remain OPEN and unmeasured. This coverage build is not an optimized performance claim.

Refs #686

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Repair the four declaration-only Linux misses from run40543120018 (20329/20333). Hoist the existing zero-sized IndexVisitor and FileMapVisitor without changing their trait bodies, and expand five import/four export macros into explicit identical thin NAPI functions.

Preserve JS names/signatures, original argument reads and diagnostic slots, error identity and byte outputs. No exclusion, product cfg, threshold, report or workflow change. Current Native100 source envelope is69files/7374gross, a separate+8paths/+942gross over61/6432, excluding only the two generated Cargo.lock files.

Plain Cargo, root coverage, full lint and173x12real Node/Bun/native/WASM literal parity passed before this normal hook; all original171 and pre-repair173 record bytes remain unchanged. Linux100 remains the acceptance of the new standard CI.

The two previously approved lexical-order fixes remain; their WASM callback/diagnostic behavior change is documented in the prior commit. All17native-slower cells remain OPEN and current-unmeasured.

Refs #686

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
@codecov

codecov Bot commented Oct 27, 2026 •

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

Files with missing lines Coverage Δ
bindings/devup-ui-binding/src/access.rs 100.00% <100.00%> (ø)
bindings/devup-ui-binding/src/de.rs 100.00% <100.00%> (ø)
bindings/devup-ui-binding/src/host.rs 100.00% <100.00%> (ø)
bindings/devup-ui-binding/src/lib.rs 100.00% <100.00%> (ø)
bindings/devup-ui-binding/src/output.rs 100.00% <100.00%> (ø)
bindings/devup-ui-binding/src/value.rs 100.00% <100.00%> (ø)
bindings/devup-ui-wasm/src/boundary.rs 100.00% <100.00%> (ø)
bindings/devup-ui-wasm/src/lib.rs 100.00% <100.00%> (ø)
bindings/devup-ui-wasm/src/reservation.rs 100.00% <ø> (ø)
bindings/devup-ui-wasm/src/state.rs 100.00% <100.00%> (ø)
... and 7 more
🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

owjs3901 and others added 8 commits October 28, 2026 07:41
Fixed cost 1: dispatch action(None) before allocating the unused failure Rc. W74m-map-proof-02.json and W74m-resolver-asm-01.log.stdout prove the baseline optimized Windows 0x48-byte allocation. Keep the enabled resolver snapshot, lifetime and error replay unchanged.

Fixed cost 2: sixteen private numeric operations replace owned operation names and JS UTF-8 control strings. Fixed cost 3: the direct private runner removes the captured thunk. Fixed cost 4: direct callback results and two opaque class-constructor identities remove outer status envelopes. Source and neutrality proofs: W74m-protocol-review-02.md, W74m-rust-fixed-costs-01.md and W74m fixed-cost authority; all metadata packets, original objects/access order, callbacks/receiver/arity, Schema/Access/Host, preflight conversion, queues/reentry/ALS and public Output ownership remain.

Parity bug 1: use typed u32 private index/schema-slot keys and static-str declared fields, never replaceable global Number for private controls. Parity bug 2: use primitive BigInt template conversion without global String. Parity bug 3: safely decode the existing copied typed bytes as Uint8Array without Array.from, retaining length/copy/set observations. Parity bug 4: read Symbol.iterator before the caught Reflect.get region so raw fault identity and access order match WASM.

Record the approved Number(USERDATA) engine difference independently of parity records: with unmodified globals both engines decode the same values/errors; native retains intrinsic ToNumber, while replaced global Number is observed only by WASM. Keep all other dynamic intrinsic observations. The recording, private-key regressions and public identity scenarios pass on real Node26.12.0/Bun1.4.4 and both engines x3.

Local gates: root build and full lint; 9446 Rust tests in25suites/default stack; root6252 and Vite868 Bun tests with both100percent functions/lines; original173x12 complete raw Buffers equal the independent W74l oracle;267validations per host plus73exception and seed-copy equality. Real root LLVM includes the production addon; the nine Windows native zeros are the same exact sites already zero at5aa37ee0 (W74n-windows-zero-audit-01), never exclusions or hidden lines. Standard Linux100 remains mandatory before acceptance.

Scope is69paths/8038gross against#794, excluding only the two generated Cargo.lock files. All17historical native-slower comparisons remain OPEN; no native-PC attribution, cost dominance or final optimized hosting acceptance is claimed. No client styling runtime, dependency, source/alias/fixture tuning, newly rejected source or new located source build error.

Refs #686

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Consolidate general pair-map startup through private MapStart16, preserving all previous numeric tags and the existing FnArgs Vec callback transport. Retain exact iterator/entries/length ordering, raw versus wrapped origins, strict tagged metadata Host errors, preflight conversion/reentry, resolver timing, public metadata and owned Output behavior. No empty-input or benchmark-selected fast path.

Use a pure change-presence predicate at three boolean consumers rather than computing/retaining the lexical diagnostic origin. Keep origin selection, lexical resolver order and every consuming diagnostic path unchanged. Limit the legacy imported-constants edit to wiring and those three substitutions.

Default-stack Rust9449/25suites, full lint/Clippy, rebuilt root and optimized native, genuine70protocol+4raw-resolver checks, Node/Bun267invalid full-buffer parity,25identity scenarios perhost and four seed children pass. Original173-case420555-byte Buffers retain the independent oracle in all12children; six extra queue/ALS cases use a separate post-primary recorder. Both Bun lanes6252+868 pass with functions/lines100.

Scope71paths/8364gross, excluding only the two inherited generated Cargo.lock files; at most two new authored paths, explicit narrow legacy exception, all other touched modules<=250pureLOC. No dependency, pin, unsafe/cfg, coverage exclusion, new rejected source or styling runtime. Old B coverage remains retained, not transferred: new-source standard CI and unchanged full corrected timing are required. No performance acceptance is claimed.

Refs #686

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #686

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #686

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #686

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #686

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #686

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #686

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
@owjs3901 owjs3901 changed the title test(binding): validate native addon coverage on Linux (spike) feat(binding): add native compiler and public platform packages Oct 30, 2026
owjs3901 and others added 6 commits October 31, 2026 21:16
Refs #686

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #686

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #686

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #686

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Refs #686

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
@owjs3901
owjs3901 marked this pull request as ready for review November 3, 2026 01:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant